import BaseModel from './BaseModel'
import { get, post } from '../api/ajax'
import API from '@/api/apis'
import { DateFormat } from 'yb-tool'
import { ImageFill, ImageLfit, PixelUnitType } from '../utils/filters'

// 学习经验模型
class PackageModel extends BaseModel {

  // 标题 String
  public name = ''
  // 创建时间 Date
  public date = new Date()
  public dateStr = ''
  // 类型 String
  public type = ''
  // 内容 String
  public content = ''
  // 描述 String
  public describe = ''
  // 封面 String
  public cover = ''
  // 项目地址
  public url = ''

  // 构造方法
  constructor() {
    super()
  }

  /* ----- 获取指定图片大小 -------*/
  // 手机端列表
  get mPackageListCover() {
    return ImageFill(this.cover, 1.6, 1.6, PixelUnitType.rem)
  }

  // 手机端详情
  get mPackageDetailCover() {
    return ImageLfit(this.cover, 7.5, 0, PixelUnitType.rem)
  }

  // PC端学习列表
  get pcPackageListCover() {
    return ImageFill(this.cover, 100, 100)
  }

  // 获取所有不同类型数组
  public static typeDistinct() {
    return get(API.package.typeDistinct)
  }

  public setDataWithJson(json: object) {
    super.setDataWithJson(json)
    this.dateStr = DateFormat(this.date)
  }

  // 获取单个数据
  public getModel() {
    return new Promise((resolve, reject) => {
      get(API.package.detail, {
        id: this._id,
      }).then((data) => {
        this.setDataWithJson(data)
        resolve(this)
      }).catch((err) => {
        reject(err)
      })
    })
  }

  // 添加或者修改数据
  public addOrModifyData() {
    const api = this._id ? API.package.update : API.package.add
    return new Promise((resolve, reject) => {
      post(api, this.getJson(['name', 'type', 'content', 'describe', 'cover', 'url'], {
        date: new Date(),
        id: this._id,
      })).then((data) => {
        this.setDataWithJson(data)
        resolve(this)
      }).catch((e) => {
        reject(e)
      })
    })
  }
}

export default PackageModel
